package com.ferreteria.zarate.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import org.springframework.stereotype.Repository;

import com.ferreteria.zarate.dao.UsuarioDao;
import com.ferreteria.zarate.model.Usuario;


@Repository
public class UsuarioDaoImpl implements UsuarioDao {
	
	private HibernateTemplate hibernateTemplate;
	private JdbcTemplate jdbcTemplate;
	
	@Autowired
	public UsuarioDaoImpl(SessionFactory sessionFactory) {
		this.hibernateTemplate = new HibernateTemplate(sessionFactory);
		this.jdbcTemplate = new JdbcTemplate(SessionFactoryUtils.getDataSource(sessionFactory));
	}
	
	public void deleteUsuario(Integer idUsuario) {
		// TODO Auto-generated method stub
		Usuario usuario = getUsuarioById(idUsuario);
		hibernateTemplate.delete(usuario);
	}
	
	public Usuario getUsuarioById(Integer idUsuario) {
		// TODO Auto-generated method stub
		Usuario user = (Usuario) hibernateTemplate.get(Usuario.class, idUsuario);
		return user;
	}
	
	@SuppressWarnings("unchecked")
	public List<Usuario> getUsuarioList(Usuario usuario) {
		// TODO Auto-generated method stub
		StringBuffer query = new StringBuffer(" from Usuario ");
		
		if(usuario != null && usuario.getNombre() != null 
				&& usuario.getNombre().length() > 0){
			
			query.append(" where upper(nombre) like '%").append(usuario.getNombre().
					toUpperCase()).append("%' ");
		}
		
		List<Usuario> list = (List<Usuario>)
				  hibernateTemplate.find(query.toString());
		return list;
	}
	
	public void saveUsuario(Usuario usuario) {
		// TODO Auto-generated method stub
		hibernateTemplate.saveOrUpdate(usuario);
	}
	
	public boolean isRepeatDescription(String nombre, Integer idUsuario) {
		// TODO Auto-generated method stub
		StringBuffer query = new StringBuffer();
		query.append("select count(*) from usuario ");
		query.append(" where upper(trim(usuario)) = '").append(nombre.trim().
				toUpperCase()).append("' ");
		
		if(idUsuario != null){
			query.append(" and idUsuario != ").append(idUsuario);
		}		
	
		int count = jdbcTemplate.queryForInt(query.toString());
		if(count > 0){
			return true;
		}
		return false;
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public Usuario getUsuarioByUsuario(String usuario) {
		List<Usuario> users = new ArrayList<Usuario>();
		 
		users = hibernateTemplate.find("from Usuario where usuario = '" + usuario + "'");
 
		if (users.size() > 0) {
			return users.get(0);
		} else {
			return null;
		}
	}



}
